Computer memories are vulnerable to errors. To mitigate such memory errors, robust memory error protection systems may be employed that enable memory errors to be detected and/or corrected using various error correcting codes (ECC). Many memory error protection systems result in increased bandwidth and power overhead due to the significant data fetched (e.g., overfetched) for memory transactions. Such a memory error protection system may employ, for example, chipkill-ECC, which enables two memory chip failures to be detected and one memory chip failure to be corrected. Such a memory error protection system may require 128 bytes of data to be fetched for each 64-byte memory transaction, resulting in overfetching of half the data and waste of bandwidth and/or power overhead.
Different applications may prefer different types of access granularities to be employed in computer memory systems. Access granularity refers to the amount of data that is accessed during a single memory access operation at a memory system. A multithreaded application may, for example, prefer a smaller access granularity that provides less use of data locality while a sequential or single threaded application may favor a larger access granularity that provides higher use of data locality. In some examples, a larger access granularity may be preferred for applications with increased dirty data as the data may be written back immediately from, for example, the application, when the cache line with the dirty data is evicted.